/**
 * Token存储管理模块
 * 统一处理所有token相关的存储操作
 */

import { STORAGE_KEYS, DEFAULT_CONFIG } from './constants.js'

/**
 * 获取存储的token
 * @returns {string|null} token值或null
 */
export const getToken = () => {
  try {
    return uni.getStorageSync(STORAGE_KEYS.TOKEN) || null
  } catch (error) {
    console.error('获取token失败:', error)
    return null
  }
}

/**
 * 设置token到存储
 * @param {string} token - token值
 * @param {boolean} remember - 是否记住登录
 */
export const setToken = (token, remember = true) => {
  try {
    uni.setStorageSync(STORAGE_KEYS.TOKEN, token)
    if (remember) {
      // 记录登录时间用于自动刷新
      uni.setStorageSync(STORAGE_KEYS.LOGIN_TIME, Date.now())
    }
  } catch (error) {
    console.error('存储token失败:', error)
  }
}

/**
 * 清除存储的token
 */
export const removeToken = () => {
  try {
    uni.removeStorageSync(STORAGE_KEYS.TOKEN)
    uni.removeStorageSync(STORAGE_KEYS.LOGIN_TIME)
  } catch (error) {
    console.error('清除token失败:', error)
  }
}

/**
 * 获取用户信息
 * @returns {object|null} 用户信息对象或null
 */
export const getUserInfo = () => {
  try {
    const userInfo = uni.getStorageSync(STORAGE_KEYS.USER_INFO)
    return userInfo ? JSON.parse(userInfo) : null
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return null
  }
}

/**
 * 设置用户信息
 * @param {object} userInfo - 用户信息对象
 */
export const setUserInfo = (userInfo) => {
  try {
    uni.setStorageSync(STORAGE_KEYS.USER_INFO, JSON.stringify(userInfo))
  } catch (error) {
    console.error('存储用户信息失败:', error)
  }
}

/**
 * 清除用户信息
 */
export const removeUserInfo = () => {
  try {
    uni.removeStorageSync(STORAGE_KEYS.USER_INFO)
  } catch (error) {
    console.error('清除用户信息失败:', error)
  }
}

/**
 * 获取登录时间
 * @returns {number} 登录时间戳
 */
export const getLoginTime = () => {
  try {
    return uni.getStorageSync(STORAGE_KEYS.LOGIN_TIME) || 0
  } catch (error) {
    console.error('获取登录时间失败:', error)
    return 0
  }
}

/**
 * 检查token是否过期
 * @returns {boolean} 是否过期
 */
export const isTokenExpired = () => {
  const loginTime = getLoginTime()
  if (!loginTime) return true
  
  const now = Date.now()
  const expireTime = loginTime + DEFAULT_CONFIG.TOKEN_EXPIRE_TIME
  
  return now > expireTime
}

/**
 * 获取存储的用户ID
 * @returns {string|null} 用户ID或null
 */
export const getStoredUserId = () => {
  const userInfo = getUserInfo()
  return userInfo?.id || null
}

/**
 * 清除所有认证相关存储
 */
export const clearAuthStorage = () => {
  removeToken()
  removeUserInfo()
}